import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from "./routes";
import store from '../store'
Vue.use(VueRouter)
 const router=new VueRouter({
  //下面配置文件属性不能乱写,胡写
  routes,
   scrollBehavior(to, from, savedPosition) {
     // 始终滚动到顶部(路由的滚动事件)
     return { y: 0 }
   },
})
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}
router.beforeEach(async (to,from,next)=>{
  next()
  let token=store.state.user.token
  let name=store.state.user.userInfo.name
  if(token){
   if(to.path=='/login'||to.path=='/register'){
     next('/')//登录了,不能进入登录和注册页面
   }else {
    if(name){
      next()//登录了且有用户名
    }else{
      try {
       await store.dispatch('getUserInfo')
        // store.dispatch('getUserInfo')//防止在其他路由下刷新造成用户信息被刷掉(由于我把header组件放在app.vuez下面所以
        //不会出现这种情况,因此这步可以省略// )
      }catch (error){
        //当token失效时
      await store.dispatch('userLogout')//清除token
        next('/login')//重新登录得到新的信息
      }
    }
   }
  }else{
    let toPath=to.path
    console.log(toPath)
    //未登录,下面这些页面不能跳转
    if(toPath.indexOf('trade')!=-1 || toPath.indexOf('/pay')!=-1||toPath.indexOf('/center')!=-1){
      next('/login?redirect='+toPath)//登录之后跳转到query参数(redirect)那个页面,于是我们传递了query参数,并在login页面做判断
    }else {
      next()//用户未登录
    }
  }
})
export  default router
